package com.lecture.javamode.principle.inversion;

/**
 * @author luyn
 * @version 1.0
 * @description 依赖反转原则
 * @date 2022/1/12 14:02
 */
public class DependecyInversion {
    public static void main(String[] args) {
        Person person = new Person();
        person.receive(new WeiXin());
    }
}

class Email {
    public String getInfo() {
        return "电子邮件信息：hello word";
    }
}

class Person {
    //完成person接收消息的功能
    //1：如果我们需要获取的对象是微信、短信等，则需要新增类，同时person也要增加相应接口的方法。
    //2：解决思路：引入一个抽象的接口IReceiver，表示接收者，这样person类与接口IReceiver发生依赖，
    //因为Email 微信 等属于接收的范围，他们各自实现IReceiver接口就行，这样我们就符合依赖倒转原则
    public void receive(Email email) {
        System.out.println(email.getInfo());
    }

    //使用依赖倒转原则后1
    public void receive(IReceiver i) {
        System.out.println(i.getInfo());

    }
}

interface IReceiver {
    String getInfo();
}

class WeiXin implements IReceiver {

    @Override
    public String getInfo() {
        return "微信发送消息：hello word";
    }
}